Redesign home and announcements - #116
Conversation
- scripts/shot.mjs: checked-in Playwright screenshot harness (required --port, standard breakpoints, mobile emulation under 768px) - event-app verify skill (new) + devcon verify skill updated to use the shared harness instead of ad-hoc scratch scripts - figma-impl skill: spec-table-first Figma implementation workflow - playwright-core added as root devDependency (driver only, no browser download; uses the cached ms-playwright headless shell) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…gn assets - Chloe-Regular.otf (from devcon site) self-hosted via next/font/local - Poppins devanagari subset for the home greeting - public/home/: travel-guide card, tickets banner key art, footer art fill (Figma exports / devcon-site images, optimized to webp) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… footer art) - Menu.tsx → components/home/ (Home, Greeting, FeaturedCard, HomeFooterArt) - Greeting rotates 4 variants every 6s (AnimatePresence slide-up/fade, reduced-motion aware, fixed-height container against layout shift) - Featured travel-guide card linking to devcon.org/travel-guide - Tickets: signed-out key-art sign-in banner; signed-in cards 2-up on desktop - Devcon 8 India sign-off: real SVG text in Chloe, image-masked with the Figma inner shadow (responsive 1-line desktop / 2-line mobile) - Desktop content escapes .section to the 1312px box (Ticket.tsx pattern) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- AnnouncementCard: inbox + home variants (date/unread dot, generic Open →/↗ CTA), long-form relative times - Home preview 3-up grid with View all; Highlights/PushOptIn restyled - Inbox: wider desktop column, uppercase day labels (Today/Yesterday kept) - Read-state snapshot semantics untouched Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Footer art: stretch letter-spacing only, never glyph outlines (lengthAdjust default), resized to match; fixes distorted letterforms - Tickets banner: art nudged down on desktop, moon to top-left on mobile, mobile bottom legibility gradient from Figma (5017:5545), p-5 mobile - Interactive cards (featured, highlights, linked announcements, banner): scale 1.03 hover / 0.97 press, 150ms ease-out, shadow-sm on hover; highlight image zoom removed; unlinked cards stay inert - Highlights carousel: SwipeToScroll edge fades (right at rest, left when scrolled) as on the speakers topic filters - Greeting: larger slide travel (28px in/out); mobile auth controls moved into the app header as icon buttons via the #header-actions portal; user-cog icon now dc-purple Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Highlights: pad inside the scroll container (outer -m-2 re-aligns) so hover scale + shadow aren't clipped by the scroller - Tickets banner: hover shadow-lg; desktop art re-nudged to object-y 68% (60% overshot); Sign in tag brightens (white/20→45) on banner hover - Featured card: arrow chip brightens (white/20→45) on card hover - Announcement CTAs underline on linked-card hover - Greeting: 30ms entry delay so the exit clears further before landing Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… scale Card no longer scales on hover/press; the art pans in gently (scale-105, 500ms ease-out) while the shadow-lg and Sign-in tag transitions stay. Also carries Scott's object-y 88% desktop framing. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Announcements page cards no longer scale/shadow on hover or press — purple border + CTA underline remain. Home preview cards keep the full scale treatment. - HomeFooterArt (Devcon 8 India lockup) removed from the page for a later design revisit; component file kept. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Tickets: loading state (incl. !hasInitialized) checked before !user, so signed-in cold loads and offline users never see the sign-in banner over their cached tickets; failed revalidation keeps the cached grid with a quiet notice instead of replacing QR codes with an error; signed-out 'Get tickets ↗' purchase path restored; solid bg fallback behind banner - resolveAnnouncementLink helper: scheme-less Notion URLs (devcon.org/x) become https:// externals; protocol-relative // no longer routes in-app; used by announcement cards and highlights - Highlights edge fades reimplemented app-side (capture-phase scroll listener + mask on the wrapper): SwipeToScroll's built-in indicators never re-sync on scroll, so the right fade latched and left never showed - relativeTime: pluralize from displayed value; floor units Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Devanagari served by a dedicated 800-weight loader (~39KB) instead of the subset across all five Poppins weights (~192KB precached); greeting stacks latin Poppins first, devanagari fallback per unicode-range - Chloe loader removed and Chloe-Regular.otf + footer-art-fill.webp deleted (parked HomeFooterArt documents how to restore from history) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Greeting: drop the truncated नमस्त variant (3 variants); no auto-rotation under prefers-reduced-motion (WCAG 2.2.2); auth circles padded to 44px hit areas - routing Link native branch: spread rest props so aria-label survives on the Capacitor div, activate on Space as well as Enter - focus-visible outline on interactive cards; sr-only h1 on Home Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
font-bold + leading-[28.8px] + tracking-[-0.5px] (was extrabold/26px/no tracking) across Featured, Announcements, Highlights, Your tickets. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
✅ Deploy Preview for devcon-event-app ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
…tCard link handling - Adjusted type-checking instructions to clarify that both `pnpm exec tsc --noEmit` and `pnpm typecheck` should gate on a zero exit code, addressing common errors related to image imports. - Refactored AnnouncementCard component to replace `url` with `link` for better clarity and consistency in handling links. - Enhanced `resolveAnnouncementLink` function to improve input normalization and security by allowing only specific schemes and handling scheme-less URLs appropriately.
…to dynamically display highlights. Added 'featured' property to announcements for home-screen hero selection. Updated related types and hooks for improved announcement handling.
- Added guidelines for handling remote images to ensure they are served from Supabase Storage and are cacheable offline. - Updated service worker configuration to improve caching of cross-origin images, preventing opaque responses that could lead to quota issues. - Implemented `crossOrigin="anonymous"` for image elements in Avatar, HighlightsCarousel, and FeaturedCard components to ensure proper caching behavior. - Expanded CacheWarmer functionality to include warming of images associated with announcements, ensuring a complete offline experience.
…ience - Added functionality to prevent broken images by utilizing `useRetryOnReconnect` in Avatar, HighlightsCarousel, and FeaturedCard components. - Images that fail to load now fall back to placeholders and automatically retry when the connection is restored. - Updated image rendering logic to ensure a seamless user experience during offline scenarios.
- Updated `useWarmImages` to prioritize image loading based on importance, ensuring critical assets are fetched first. - Enhanced `CacheWarmer` to include static assets and improve the warm list for offline scenarios. - Integrated `useRetryOnReconnect` in multiple components to handle image loading failures and provide fallback options. - Adjusted `next.config.ts` to ensure proper precaching of essential assets for offline use.
didierkrux
left a comment
There was a problem hiding this comment.
Nice work on the redesign 👍
3 things added on top:
1. Small fixes from review
- Announcement links: only real web links (
http,https,mailto) are accepted now. Before, anything pasted into the Notion link column was trusted, includingjavascript:links that would run code when tapped. - Cards only show the arrow/CTA when the link actually works.
- Fixed the typecheck note in the verify skill. Those
TS2307errors you saw aren't real. They just mean a fresh clone hasn't generatednext-env.d.tsyet. Runpnpm devonce and typecheck is clean.
2. The Featured card is now editable in Notion
It used to be hardcoded, so changing the biggest card on the home screen needed a deploy. Now it's just a highlight with a Featured checkbox in the same Notion DB:
- Tick one highlight → it becomes the Featured card
- Tick none → the Featured section disappears
- The featured one is hidden from the carousel below, so it doesn't appear twice
- Links to app pages (like
/schedule) now open in the app instead of a new tab
3. Images now work offline
Two problems: avatars and highlight images were never being saved for offline use, and the app only saves images you've actually scrolled past. So the speakers page worked offline but showed empty circles.
Both fixed. The app now quietly downloads images in the background while you're online after the first load, so they're ready later:
- Only downloads what's new, so reopening the app costs nothing
- Avatars go last, since there are 645 of them and they matter least
- If an image fails, you get a placeholder instead of a broken image, and it retries when the connection comes back
Rules for adding new images are written up in event-app/CLAUDE.md.
|
Thanks for review @didierkrux — and thanks for setting up the Notion pipeline for Featured cards — much cleaner UX! |
No description provided.